/**
 * 定义基于pinia的store存储
 * 设置相关的store数据（token、菜单、标签等相关）
 * @author Jamen
 * @since 2022-08-11
 */
import { defineStore } from 'pinia';

// 创建store，defineStore调用后返回函数，调用该函数获得Store实体
const useSettingStore = defineStore({
  // 必传的参数，id值，在store中唯一
  id: 'settingStore',
  // 定义数据，返回对象和属性
  state: () => ({
    token: '', // 请求token
    userInfo: {} as any, // 用户基本信息
    apps: [] as any, //应用集合
    shortcuts: [] as any, //桌面快捷方式
    licenses: [] as any, //许可证集合
  }),
  // 获取store模块的属性
  getters: {
    // getToken: state => state.token,
    // getUserInfo: state => state.userInfo,
    // getAuthorize: state => state.authorize,
    // getShortcuts: state => state.shortcuts,
  },
  // 设置store模块的属性
  actions: {
    // 保存token
    setToken(token: string) {
      this.token = token;
    },
    // 保存用户基本信息
    setUserInfo(userInfo: any) {
      this.userInfo = userInfo;
    },
    // 设置应用集合
    setApps(apps: any) {
      this.apps = apps;
    },
    // 设置桌面快捷方式
    setShortcuts(shortcuts: any) {
      this.shortcuts = shortcuts;
    },
    // 设置授许可证集合
    setLicenses(licenses: any) {
      this.licenses = licenses;
    },
  },

  // 开启数据缓存  -- 需要在store/index.js中import piniaPluginPersist 插件
  persist: {
    enabled: true, // 开启持久化
    strategies: [
      {
        // key: 'token', //自定义Key，也可以去掉，使用默认值为参数id的值
        storage: localStorage, // 可以为localStorage或者sessionStorage
        // 可以通过paths指定需要持久化的值，其他没有指定的则不会持久化
        paths: ['token', 'userInfo', 'apps', 'shortcuts', 'licenses'],
      },
    ],
  },
});
export default useSettingStore;
